﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using EFITransmissao.Entidade;
using Dados.ConexaoSQL;
using System.Data;
using System.Collections;
using Dados.ConexaoCE;

namespace EFITransmissao.Dados.DAO
{
    public class DAORota
    {
        public DAORota() { }

        /// <summary>
        /// Insere Dados vindo da Useall em relação a Lista de Rotas e Leituristas
        /// que serão executadas em um grupo fat / mês.
        /// </summary>
        public static void InsereListaTrocaRotaCE()
        {
            IList<ListaTrocaRota> lst = new List<ListaTrocaRota>();

            try
            {
                lst = getListaTrocaRota();
                if (lst.Count > 1)
                {
                    string _stringconexao = @"Persist Security Info = false; 
                                    Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";

                    CEMSDataAccess db = new CEMSDataAccess(_stringconexao);

                    //Remove:
                    db.ExecutaAtualizacao("DeleteListaTrocaRotaCE", null);

                    foreach (var item in lst)
                    {
                        Hashtable prm = new Hashtable();
                        prm["@idRota"] = item.IdRota;
                        prm["@matricula"] = item.Matricula;
                        prm["@leiturista"] = item.Leiturista;

                        db.ExecutaAtualizacao("InsereListaTrocaRotaCE", prm);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return;
        }

        /// <summary>
        /// Obtém uma lista com os nomes dos leituristas
        /// </summary>
        /// <returns></returns>
        public static IList<string> ObterListaLeituristasTrocaRotaCE()
        {
            IList<string> lst = new List<string>();

            try
            {
                string _stringconexao = @"Persist Security Info = false; 
                                    Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";

                CEMSDataAccess db = new CEMSDataAccess(_stringconexao);
                DataTable dt = db.ExecutaConsulta("ObterListaLeituristasTrocaRotaCE", null);

                lst.Add(string.Empty);
                foreach (DataRow dr in dt.Rows)
                {
                    lst.Add(dr["Leiturista"].ToString());
                }
                
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return lst;
        }

        /// <summary>
        /// Obtém Troca Rota
        /// </summary>
        /// <returns></returns>
        public static ListaTrocaRota ObterTrocaRotaCE(string nome)
        {
            ListaTrocaRota obj = new ListaTrocaRota();
            try
            {
                string _stringconexao = @"Persist Security Info = false; 
                                    Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";

                Hashtable prm = new Hashtable();
                prm["@leiturista"] = nome;
                
                CEMSDataAccess db = new CEMSDataAccess(_stringconexao);
                DataTable dt = db.ExecutaConsulta("ObterTodosListaTrocaRotaCE", prm);
                                
                foreach (DataRow dr in dt.Rows)
                {
                    obj.IdRota = dr["IdRota"].ToString();
                    obj.Matricula = dr["Matricula"].ToString();
                    obj.Leiturista = dr["Leiturista"].ToString();
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return obj;
        }

        /// <summary>
        /// Insere Cadastro da Troca de Rota pelo leiturista.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static bool InsereCadastroTrocaRota(TrocaRota obj)
        {
            bool retorno = true;
            try
            {                
                Hashtable prm = new Hashtable();
                prm["@idGrupoFat"] = obj.IdGrupoFat;
                prm["@uc"] = obj.Uc;
                prm["@daRota"] = obj.DaRota;
                prm["@paraRota"] = obj.ParaRota;
                prm["@matricula"] = obj.Matricula;
                prm["@leiturista"] = obj.Leiturista;
                prm["@mes"] = obj.Mes;

                string _stringconexao = @"Persist Security Info = false; 
                                    Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";
                
                CEMSDataAccess db = new CEMSDataAccess(_stringconexao);

                db.ExecutaAtualizacao("InsereCadastroTrocaRota", prm);

            }
            catch (Exception)
            {
                retorno = false;                
            }

            return retorno;
        }

        /// <summary>
        /// Excluir registro de troca de rota.
        /// </summary>
        /// <param name="uc"></param>
        /// <returns></returns>
        public static bool ExcluirRegistro(int uc)
        {
            bool retorno = true;
            try
            {
                Hashtable prm = new Hashtable();                
                prm["@uc"] = uc;                

                string _stringconexao = @"Persist Security Info = false; 
                                    Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";

                CEMSDataAccess db = new CEMSDataAccess(_stringconexao);

                db.ExecutaAtualizacao("ExcluirRegistro", prm);

            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        #region SQL Server

        /// <summary>
        /// Obtém a Lista com a Rota, Matricula e Nome do Leiturista.
        /// </summary>
        /// <returns></returns>
        private static IList<ListaTrocaRota> getListaTrocaRota()
        {
            IList<ListaTrocaRota> lst = new List<ListaTrocaRota>();

            try
            {
                MSSQLDataAccess db = new MSSQLDataAccess();
                DataTable dt = db.ExecutaConsulta("ObterListaTrocaRota", null);

                foreach (DataRow dr in dt.Rows)
                {
                    ListaTrocaRota obj = new ListaTrocaRota();
                    obj.IdRota = dr["IdRota"].ToString();
                    obj.Matricula = dr["Matricula"].ToString();
                    obj.Leiturista = dr["Leiturista"].ToString();

                    lst.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return lst;
        }

        /// <summary>
        /// Obtém a Lista com a Rota, Matricula e Nome do Leiturista.
        /// </summary>
        /// <returns></returns>
        private static IList<TrocaRota> getTrocaRota()
        {
            IList<TrocaRota> lst = new List<TrocaRota>();

            try
            {
                string _stringconexao = @"Persist Security Info = false; 
                                    Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";

                CEMSDataAccess db = new CEMSDataAccess(_stringconexao);
                DataTable dt = db.ExecutaConsulta("ObterTodosTrocaRotaCE", null);

                foreach (DataRow dr in dt.Rows)
                {
                    TrocaRota obj = new TrocaRota();
                    obj.Uc = int.Parse(dr["uc"].ToString());
                    obj.IdGrupoFat = int.Parse(dr["GrupoFat"].ToString());
                    obj.DaRota = dr["DaRota"].ToString();
                    obj.ParaRota = dr["ParaRota"].ToString();
                    obj.Matricula = int.Parse(dr["Matricula"].ToString());
                    obj.Leiturista = dr["Leiturista"].ToString();
                    obj.Mes = dr["Mes"].ToString();

                    lst.Add(obj);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return lst;
        }

        /// <summary>
        /// Insere no SQL Server os Dados ref. a Troca de Rota.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static void InsereTrocaRotaForSQLServer()
        {
            try
            {
                IList<TrocaRota> lst = getTrocaRota();                

                MSSQLDataAccess db = new MSSQLDataAccess();
                db.ExecutaAtualizacao_TrocaRota("InsereTrocaRotaForSQLServer", lst);

            }
            catch (Exception) { }
            
            return ;
        }
        
        /// <summary>
        /// Deleta todos os registros da Troca de Rota.
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static void DeleteTodosTrocaRotaCE()
        {            
            try
            {      

                string _stringconexao = @"Persist Security Info = false; 
                                Data Source = .\Program Files\EFI_Sulgipe\Leituras.sdf";

                CEMSDataAccess db = new CEMSDataAccess(_stringconexao);

                db.ExecutaAtualizacao("DeleteTodosTrocaRotaCE", null);

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }            
        }

        #endregion
    }
}
